export { };
// 泛型
// 我们需要一种方法使返回值的类型与传入参数的类型是相同的。 这里，我们使用了类型变量，它是一种特殊的变量，只用于表示类型而不是值。

// 1. 声明一个可以返回number类型的数组
function createNumberArray(length: number, value: number): number[] {
  let arr: Array<number> = Array(length).fill(value) // fill(),填充数组的每一个元素的值
  return arr;
}
// let a = createNumberArray(3, 15);
// console.log(a); // [ 15, 15, 15 ]


// 2. 声明一个可以返回string类型的数组

function createStringArray(length: number, value: string): string[] {
  let arr: Array<string> = Array(length).fill(value)
  return arr;
}

// let b = createStringArray(3, "hello") //[ 'hello', 'hello', 'hello' ]
// console.log(b);

//写一个泛型的函数，可以创建并返回任意类型的数组
// T,表示 泛型，在函数名和数组Array后面，用<T>,来表示泛型
// 调用 函数时，给传递一个数据类型后，原函数中所的T，都是同一个数据类型。 
//  <T> 可以接收任何的数据类型。
function createArray<T>(length: number, value: T): T[] {
  let arr: Array<T> = Array(length).fill(value)
  return arr;
}

let c = createArray<number>(3, 15)  // 参数2的类型和T不同，就会语法错误。

let d = createArray<string>(4, 'hello')

console.log(c, d); // [ 15, 15, 15 ] [ 'hello', 'hello', 'hello', 'hello' ]
